package com.songsong.myblog2.controller;

import com.songsong.myblog2.service.UserService;
import org.apache.shiro.authc.ExcessiveAttemptsException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

@Controller()
public class HomeController {
    @Autowired
    private UserService sysUserService;

    /**
     * 跳转到公共主页面
     *
     * @return
     */
    @RequestMapping({"/", "/main"})
    public String main() {
        return "anon/main";
    }

    /**
     * 跳转到注册页面
     */
    @RequestMapping("/toregister")
    public String toregister() {
        return "anon/register";
    }

    /**
     * 登录成功跳转的页面
     *
     * @return
     */
    @RequestMapping("/index")
    public String index(/*HttpServletRequest request*/) {
        /*//通过安全管理工具，获取用户对象
        Subject subject = SecurityUtils.getSubject();
        //获取用户身份-------用户名
        String username = (String)subject.getPrincipal();
        //获取当前对象所在的session
        Session session = subject.getSession();
        //获取权限列表
        List<SysPermission> permissionList = sysUserService.findPermission(username);
        //添加权限列表到session回话中
        session.setAttribute("menuList",permissionList);*/
        /*
         * 登录成功之后跳转到用户主页面
         * 需要填充的数据
         * 1.该用户的所有博客
         * 2.最热的八篇博客
         * 3.用户六张照片
         * 4.总分类和分类数目  该分类是系统定死的  用户不能自定义分类
         * */
        return "authc/index";
    }

    @RequestMapping("/login")
    public String login(HttpServletRequest request, Map<String, Object> map) throws Exception {
        System.out.println("HomeController.login()");
        // 登录失败从request中获取shiro处理的异常信息。
        // shiroLoginFailure:就是shiro异常类的全类名.
        String exception = (String) request.getAttribute("shiroLoginFailure");
        System.out.println("exception=" + exception);
        String msg = "";
        if (exception != null) {
            if (UnknownAccountException.class.getName().equals(exception)) {
                System.out.println("UnknownAccountException -- > 账号不存在：");
                msg = "账号不存在：";
            } else if (IncorrectCredentialsException.class.getName().equals(exception)) {
                System.out.println("IncorrectCredentialsException -- > 密码不正确：");
                msg = "密码不正确：";
            } else if ("kaptchaValidateFailed".equals(exception)) {
                System.out.println("kaptchaValidateFailed -- > 验证码错误");
                msg = "验证码错误";
            } else if (ExcessiveAttemptsException.class.getName().equals(exception)) {
                System.out.println("ExcessiveAttemptsException -- > 密码输入错误次数过多，已经锁定 ，请稍后重试");
                msg = "密码输入错误次数过多，已经锁定 ，请稍后重试";
            } else {
                msg = "else >> " + exception;
                System.out.println("else -- >" + exception);
            }
        }


        map.put("msg", msg);
        // 此方法不处理登录成功,由shiro进行处理
        return "anon/login";
    }

    @RequestMapping("/403")
    public String unauthorizedRole() {
        System.out.println("------没有权限-------");
        return "/403";
    }

}